package com.nav.backend.service;

import com.nav.backend.pojo.User;
import com.nav.backend.pojo.UserAddress;

import java.util.List;

/**
 * UserService 接口定义了用户相关的业务逻辑操作
 *
 * @author Seamher
 */
public interface UserService {

    /**
     * 根据用户名查找用户
     *
     * @param account 用户名
     * @return User 对象
     */
    User findByUserName(String account);

    /**
     * 根据邮箱查找用户
     *
     * @param email 用户邮箱
     * @return User 对象
     */
    User findByEmail(String email);

    /**
     * 根据手机号查找用户
     *
     * @param phone 用户手机号
     * @return User 对象
     */
    User findByPhone(String phone);

    /**
     * 注册新用户
     *
     * @param account  用户名
     * @param password 密码
     */
    void register(String account, String password);

    /**
     * 注销用户
     *
     * @param account 用户名
     */
    void logout(String account);

    /**
     * 修改用户信息
     *
     * @param account    用户名
     * @param password   密码
     * @param phone      电话
     * @param email      邮箱
     * @param newAccount 新用户名
     */
    void modifyInfo(String account, String password, String phone, String email, String newAccount);

    /**
     * 添加用户地址
     *
     * @param userComment    地址评论
     * @param userAddress    地址
     * @param userAddressX   地址 X 坐标
     * @param userAddressY   地址 Y 坐标
     * @param userAddressInfo 地址信息
     * @param account        用户名
     */
    void addAddress(String userComment, String userAddress, Double userAddressX, Double userAddressY, String userAddressInfo, String account);

    /**
     * 获取用户地址列表
     *
     * @param account 用户名
     * @return 用户地址列表
     */
    List<UserAddress> getAddress(String account);

    /**
     * 修改用户地址
     *
     * @param userComment    地址评论
     * @param userAddress    地址
     * @param userAddressX   地址 X 坐标
     * @param userAddressY   地址 Y 坐标
     * @param userAddressInfo 地址信息
     * @param userAddressID  地址 ID
     */
    void modifyAddress(String userComment, String userAddress, Double userAddressX, Double userAddressY, String userAddressInfo, Integer userAddressID);

    /**
     * 删除用户地址
     *
     * @param userAddressId 地址 ID
     */
    void deleteAddress(Integer userAddressId);

    void logoutUserAddress(String account);

    void logoutCollectionAddress(String account);

    void logoutCollectionPath(String account);

    void logoutRingSearch(String account);

    void logoutTreeLineSearch(String account);

    void logoutTwoPointsSearch(String account);
}
